<?php
App::uses('AppController', 'Controller');
/**
 * Cursos Controller
 *
 * @property Curso $Curso
 * @property PaginatorComponent $Paginator
 * @property SessionComponent $Session
 */
class CursosController extends AppController {

/**
 * Components
 *
 * @var array
 */
	public $components = array('Paginator', 'Session', 'Utilities');
        public $uses = array('Curso', 'Disciplina', 'CursosDisciplina', 'UnidadeEnsinoCurso', 'UnidadeEnsino', 'CursoDisciplina');

/**
 * index method
 *
 * @return void
 */
	public function index() {
		$this->Curso->recursive = 0;
		$this->set('cursos', $this->Paginator->paginate('Curso', array('Curso.ativo' => 'S')));
	}

/**
 * view method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function view($id = null) {
		if (!$this->Curso->exists($id)) {
			throw new NotFoundException(__('Curso inválido'));
		}
		$options = array('contain' => array('TipoCurso',
                                                   'UnidadeEnsinoCurso' => array('UnidadeEnsino', 'conditions' => array('UnidadeEnsinoCurso.ativo' => 'S')),
                                                   'CursoDisciplina' => array('Disciplina')),
                                 'conditions' => array('Curso.' . $this->Curso->primaryKey => $id));
                
		$this->set('curso', $this->Curso->find('first', $options));
	}

/**
 * add method
 *
 * @return void
 */
public function add() {
        if ($this->request->is('post')) {
            $this->Curso->create();
            
            $this->request->data['Curso']['ativo'] = 'S';
            
            if(!empty($this->request->data['UnidadeEnsinoCurso'])){
                foreach ($this->request->data['UnidadeEnsinoCurso'] as $chave => $valor) {
                    $this->Utilities->formatarDecimal($this->request->data['UnidadeEnsinoCurso'][$chave]['valor']);
                    $this->request->data['UnidadeEnsinoCurso'][$chave]['ativo'] = 'S';
                }
            }
            
            if(!empty($this->request->data['CursoDisciplina'])){
                foreach ($this->request->data['CursoDisciplina'] as $chave => $valor) {
                    $this->Utilities->formatarDecimal($this->request->data['CursoDisciplina'][$chave]['valor']);
                }
            }
            
            if ($this->Curso->saveAll($this->request->data)) {
                $this->Session->setFlash(__('Curso salvo com sucesso.'));
                return $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('O curso não pôde ser salvo. Por favor, tente novamente.'));
            }
        }
        $tipoCursos = $this->Curso->TipoCurso->find('list', array('conditions' => array('ativo' => 'S'), 'order' => array('nome_reduzido')));
        $this->Utilities->adicionarItemChaveVazia($tipoCursos, '--Selecione--');
        
        $this->UnidadeEnsino->recursive = -1;
        $unidadesEnsino = $this->UnidadeEnsino->find('list', array('conditions' => array('ativa' => 'S'), 'order' => array('nome_reduzido')));
        
        $this->UnidadeEnsino->recursive = -1;
        $disciplinas = $this->Disciplina->find('list', array('conditions' => array('ativa' => 'S')));

        $this->set(compact('tipoCursos', 'unidadesEnsino', 'disciplinas'));
    }

/**
 * edit method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
public function edit($id = null) {
        if (!$this->Curso->exists($id)) {
            throw new NotFoundException(__('Curso inválido'));
        }
        if ($this->request->is(array('post', 'put'))) {
            
            $dataSource = $this->Curso->getDataSource();
            $dataSource->begin();
            
            $sucesso = true;
            
//            if(!empty($this->request->data['UnidadeEnsinoCurso'])){
//                foreach ($this->request->data['UnidadeEnsinoCurso'] as $chave => $valor) {
//                    $this->Utilities->formatarDecimal($this->request->data['UnidadeEnsinoCurso'][$chave]['valor']);
//                }
//            }
            
            if(empty($this->request->data['UnidadeEnsinoCurso'])){
                
                $sucesso = $this->UnidadeEnsinoCurso->updateAll(array('ativo' => "'N'"), array('curso_id' => $this->request->data['Curso']['id']));
            }else{
                
                $this->UnidadeEnsinoCurso->recursive = -1;
                $unidadeEnsinoCursoBd = $this->UnidadeEnsinoCurso->find('all', array('conditions' => array('UnidadeEnsinoCurso.curso_id' => $this->request->data['Curso']['id'],
                                                                                                           'UnidadeEnsinoCurso.ativo' => 'S')));
                
                if (!empty($unidadeEnsinoCursoBd)) {
                    foreach ($this->request->data['UnidadeEnsinoCurso'] as $chaveReq => $valorReq) {
                        if (!empty($valorReq['id'])) {
                            
                            $this->request->data['UnidadeEnsinoCurso'][$chaveReq]['curso_id'] = $this->request->data['Curso']['id'];
                            $this->request->data['UnidadeEnsinoCurso'][$chaveReq]['ativo'] = 'S';
                            
                            foreach ($unidadeEnsinoCursoBd as $chaveBd => $valorBd) {
                                if ($valorReq['id'] == $valorBd['UnidadeEnsinoCurso']['id']) {
                                    unset($unidadeEnsinoCursoBd[$chaveBd]);
                                }
                            }
                        }
                    }
                }
                
                if(!empty($unidadeEnsinoCursoBd)){
                    $unidadeEnsinoCurso = array();
                    foreach ($unidadeEnsinoCursoBd as $valor) {
                        $unidadeEnsinoCurso[] = $valor['UnidadeEnsinoCurso']['id'];
                    }
                    
                    $this->UnidadeEnsinoCurso->unbindModel(array('belongsTo' => array('UnidadeEnsino', 'Curso')));
                    $sucesso = $this->UnidadeEnsinoCurso->updateAll(array('ativo' => "'N'"), array('id' => $unidadeEnsinoCurso));
                }
            }
            
            if (!empty($this->request->data['UnidadeEnsinoCurso'])) {
                foreach ($this->request->data['UnidadeEnsinoCurso'] as $chave => $valor) {
                    $this->Utilities->formatarDecimal($this->request->data['UnidadeEnsinoCurso'][$chave]['valor']);
                    if (!isset($valor['id'])) {
                        $this->request->data['UnidadeEnsinoCurso'][$chave]['ativo'] = 'S';
                    }
                }
            }
            
            if(empty($this->request->data['CursoDisciplina'])){
                $this->CursoDisciplina->deleteAll(array('curso_id' => $id));
            }else{
                
                $this->CursoDisciplina->recursive = -1;
                $cursoDisciplinaBd = $this->CursoDisciplina->find('list', array('curso_id' => $id));
                
                if(!empty($cursoDisciplinaBd)){
                    foreach ($this->request->data['CursoDisciplina'] as $chave => $valor) {
                        if(!empty($valor['id'])){
                            if(array_key_exists($valor['id'], $cursoDisciplinaBd)){
                                unset($cursoDisciplinaBd[$valor['id']]);
                            }
                        }
                    }
                }
                
                if(!empty($cursoDisciplinaBd)){
                    $this->CursoDisciplina->deleteAll(array('CursoDisciplina.id' => $cursoDisciplinaBd));
                }
            }
            
            if (!empty($this->request->data['CursoDisciplina'])) {
                foreach ($this->request->data['CursoDisciplina'] as $chave => $valor) {
                    $this->Utilities->formatarDecimal($this->request->data['CursoDisciplina'][$chave]['valor']);
                }
            }
            
            if ($sucesso && $this->Curso->saveAll($this->request->data)) {
                $dataSource->commit();
                $this->Session->setFlash(__('Curso salvo com sucesso.'));
                return $this->redirect(array('action' => 'index'));
            } else {
                $dataSource->rollback();
                $this->Session->setFlash(__('O curso não pôde ser alterado. Por favor, tente novamente.'));
            }
        } else {
            $options = array('contain' => array('TipoCurso',
                                                'UnidadeEnsinoCurso' => array('conditions' => array('UnidadeEnsinoCurso.ativo' => 'S')),
                                                'CursoDisciplina'),
                             'conditions' => array('Curso.' . $this->Curso->primaryKey => $id));
            $this->request->data = $this->Curso->find('first', $options);
        }
        $tipoCursos = $this->Curso->TipoCurso->find('list', array('conditions' => array('ativo' => 'S'), 'order' => array('nome_reduzido')));
        $this->Utilities->adicionarItemChaveVazia($tipoCursos, '--Selecione--');
        
        $this->UnidadeEnsino->recursive = -1;
        $unidadesEnsino = $this->UnidadeEnsino->find('list', array('conditions' => array('ativa' => 'S'), 'order' => array('nome_reduzido')));
        
        $this->UnidadeEnsino->recursive = -1;
        $disciplinas = $this->Disciplina->find('list', array('conditions' => array('ativa' => 'S')));

        $this->set(compact('tipoCursos', 'unidadesEnsino', 'disciplinas'));
        
    }

/**
 * delete method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function delete($id = null) {
		$this->Curso->id = $id;
		if (!$this->Curso->exists()) {
			throw new NotFoundException(__('Curso inválido'));
		}
		$this->request->allowMethod('post', 'delete');
                
                $this->request->data['Curso']['id'] = $id;
                $this->request->data['Curso']['ativo'] = 'N';
                
		if ($this->Curso->save($this->request->data)) {
			$this->Session->setFlash(__('Curso excluído com sucesso.'));
		} else {
			$this->Session->setFlash(__('O curso não pôde ser excluído. Por favor, tente novamente.'));
		}
		return $this->redirect(array('action' => 'index'));
	}
        
        public function unidades($cursoId){
            if ($this->request->is('post')) {
                $this->UnidadeEnsinoCurso->recursive = 0;
                $unidadeEnsinoCursos = $this->Paginator->paginate();
            } else{
                $this->UnidadeEnsinoCurso->recursive = -1;
                $unidadeEnsinoCursos = $this->Paginator->paginate('UnidadeEnsinoCurso', array('UnidadeEnsinoCurso.id' => -1));
            }
            
            $this->Curso->recursive = -1;
            $this->request->data = $this->Curso->find('first', array('conditions' => array('id' => $cursoId)));
            
            $unidadesEnsino = $this->UnidadeEnsino->find('list', array('conditions' => array('ativa' => 'S')));
            $this->Utilities->adicionarItemChaveVazia($unidadesEnsino, '--Selecione--');
            
            $this->set('unidadesEnsino', $unidadesEnsino);
            
            $this->set('unidadeEnsinoCursos', $unidadeEnsinoCursos);
        }
}
